import UIAbility from '@ohos.app.ability.UIAbility';
import window from '@ohos.window';
import { BusinessError } from '@ohos.base';
import promptAction from '@ohos.promptAction';
import { ServiceFactory } from '../services/ServiceFactory';
import AppStorage from '@ohos.appstorage';

export default class EntryAbility extends UIAbility {
  onCreate(want, launchParam) {
    console.log('EntryAbility onCreate');
    
    // 初始化全局错误处理
    this.setupGlobalErrorHandling();
    
    // 初始化服务
    this.initializeServices();
    
    // 设置全局主题配置
    this.setupGlobalTheme();
  }
  
  // 设置全局错误处理
  private setupGlobalErrorHandling(): void {
    // 捕获未处理的Promise错误
    Promise.prototype.finally = Promise.prototype.finally || function(callback) {
      const promise = this.constructor;
      return this.then(
        value => promise.resolve(callback()).then(() => value),
        reason => promise.resolve(callback()).then(() => { throw reason; })
      );
    };
    
    // 捕获全局错误
    try {
      // 模拟全局错误捕获
      const originalConsoleError = console.error;
      console.error = (...args) => {
        originalConsoleError(...args);
        
        // 过滤掉某些错误，只显示重要错误
        const errorMessage = args.join(' ');
        if (!errorMessage.includes('Warning') && !errorMessage.includes('deprecated')) {
          console.log(`全局错误捕获: ${errorMessage}`);
        }
      };
    } catch (e) {
      console.log('设置全局错误处理失败');
    }
  }
  
  // 初始化服务
  private async initializeServices(): Promise<void> {
    try {
      // 初始化ServiceFactory
      await ServiceFactory.initialize();
      console.log('服务初始化成功');
    } catch (error) {
      console.error('服务初始化失败:', error);
      // 可以在这里添加重试逻辑或降级策略
    }
  }
  
  // 设置全局主题配置
  private setupGlobalTheme(): void {
    // 设置主题相关的全局配置
    AppStorage.setOrCreate('appTheme', {
      darkMode: false,
      accentColor: '#0D9FFB',
      fontScale: 1.0
    });
  }

  onDestroy() {
    console.log('EntryAbility onDestroy');
    // 清理资源
    this.cleanupResources();
  }
  
  // 清理资源
  private cleanupResources(): void {
    try {
      // 这里可以添加需要在应用销毁时清理的资源
      console.log('资源清理完成');
    } catch (error) {
      console.error('资源清理失败:', error);
    }
  }

  onWindowStageCreate(windowStage: window.WindowStage) {
    // 设置WindowStage的事件监听
    windowStage.on('windowStageEvent', (data) => {
      console.info('WindowStage event: ' + JSON.stringify(data));
    });

    // 设置主窗口属性
    windowStage.getMainWindow().then((mainWindow) => {
      // 设置窗口背景
      mainWindow.setBackgroundColor('#F5F5F5').catch((err) => {
        console.error('设置窗口背景失败:', err);
      });
      
      // 设置窗口亮度
      mainWindow.setBrightness(1.0).catch((err) => {
        console.error('设置窗口亮度失败:', err);
      });
    });

    // 设置主窗口的显示内容
    windowStage.loadContent('pages/LoginPage', (err: BusinessError, data) => {
      if (err.code) {
        console.error('加载页面失败. 原因: ' + JSON.stringify(err));
        // 显示错误提示
        try {
          promptAction.showToast({
            message: '应用启动失败，请重试',
            duration: 3000
          });
        } catch (e) {
          console.error('显示提示失败:', e);
        }
        return;
      }
      console.info('加载页面成功. 数据: ' + JSON.stringify(data));
    });
  }

  onWindowStageDestroy() {
    console.log('EntryAbility onWindowStageDestroy');
  }

  onForeground() {
    console.log('EntryAbility onForeground');
  }

  onBackground() {
    console.log('EntryAbility onBackground');
  }
}